#! /bin/bash

	#########################################
	#	postini.sh			#
	#	Grupo 09			#
	# ------------------------------------- #
	# La ejecución del presente script debe #
	# realizarse sin lanzar un shell hijo.	#
	# 					#
	# Ej.:		$>. postini.sh		#
	#########################################

CDIR=`pwd`
unset ERR_INST

# Estados posibles de la inicialización del ambiente
OK=0
ERROR=1

##########################
# Región de funciones	 #
##########################
function ambienteInicializado(){
#Chequea si las variables de ambiente ya fueron seteadas

	TMPX=1
	if [ ! -z "$grupo" ] #Control 1
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ ! -z "$CURRDIR" ] #Control 2
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ ! -z "$CONFDIR" ] #Control 3
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ ! -z "$BINDIR" ] #Control 4
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ ! -z "$LOGDIR" ] #Control 5
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ ! -z "$ARRIDIR" ] #Control 6
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	CHKPATH=`echo $PATH | grep "$CDIR"`
	if [ ! -z "$CHKPATH" ] #Control 7
	then
		TMPX=`echo "$TMPX+1" | bc`
	fi

	if [ $TMPX -eq 8 ]
	then
		echo 1 # Ambiente inicializado previamente
	else
		echo 0 # Ambiente no inicializado
	fi
}

function inicializarAmbiente(){
	#Lectura de CURRDIR
	CURRDIR=`grep '^CURRDIR' "$grupo/conf/Instula.conf" |sed 's/^CURRDIR = \(.*\)$/\1/'`

	#Lectura de CONFDIR
	CONFDIR=`grep '^CONFDIR' "$grupo/conf/Instula.conf" |sed 's/^CONFDIR = \(.*\)$/\1/'`

	#Lectura de BINDIR
	BINDIR=`grep '^BINDIR' "$grupo/conf/Instula.conf" |sed 's/^BINDIR = \(.*\)$/\1/'`

	#Lectura de ARRIDIR
	ARRIDIR=`grep '^ARRIDIR' "$grupo/conf/Instula.conf" |sed 's/^ARRIDIR = \(.*\)$/\1/'`

	#Lectura de DATASIZE
	DATASIZE=`grep '^DATASIZE' "$grupo/conf/Instula.conf" |sed 's/^DATASIZE = \(.*\)$/\1/'`

	#Lectura de LOGDIR
	LOGDIR=`grep '^LOGDIR' "$grupo/conf/Instula.conf" |sed 's/^LOGDIR = \(.*\)$/\1/'`

	#Lectura de LOGEXT
	LOGEXT=`grep '^LOGEXT' "$grupo/conf/Instula.conf" |sed 's/^LOGEXT = \(.*\)$/\1/'`

	#Lectura de MAXLOGSIZE
	MAXLOGSIZE=`grep '^MAXLOGSIZE' "$grupo/conf/Instula.conf" |sed 's/^MAXLOGSIZE = \(.*\)$/\1/'`

	#Lectura de USERID
	USERID=`grep '^USERID' "$grupo/conf/Instula.conf" |sed 's/^USERID = \(.*\)$/\1/'`

	#Lectura de FECINS
	FECINS=`grep '^FECINS' "$grupo/conf/Instula.conf" |sed 's/^FECINS = \(.*\)$/\1/'`

	#Actualizacion de PATH
	CHKPATH=`echo $PATH | grep "$grupo"`
	if [ -z "$CHKPATH" ]
	then
		#PATH=`echo "$PATH:$CDIR"`
		PATH=`echo "$PATH:$CDIR:$grupo:$BINDIR"`		
	fi
			
	export PATH
	export grupo
	export CURRDIR
	export CONFDIR
	export BINDIR
	export ARRIDIR
	export DATASIZE
	export LOGDIR
	export LOGEXT
	export MAXLOGSIZE
	export USERID
	export FECINS
}

function determinarGrupo(){
	#Determinacion del directorio del grupo
	grupo=`echo $CDIR | sed 's/\(.*\)\/grupo09\/.*$/\1\/grupo09/'`
}

function verificarInstulaConf(){
	RUTA_CONFIG="$grupo/conf/Instula.conf";
        if [ ! -r "$RUTA_CONFIG" ]
        then 
             ERR_INST=`echo "$ERR_INST*No se encuentra el archivo de configuración Instula.conf*"`
        fi
}

function verificarInstalacion(){
	RUTA_POSTONIO="$BINDIR/postonio.sh";
        if [ ! -x "$RUTA_POSTONIO" ]
        then 
            ERR_INST=`echo "$ERR_INST*POSTONIO no se encuentra instalado*"`
        fi

        RUTA_POSTULAR="$BINDIR/postular.sh";
        if [ ! -x "$RUTA_POSTULAR" ]
        then 
            ERR_INST=`echo "$ERR_INST*POSTULAR no se encuentra instalado*"`
        fi

        RUTA_POSTLIST="$BINDIR/PLIST.PL";
        if [ ! -x "$RUTA_POSTLIST" ]
        then 
             ERR_INST=`echo "$ERR_INST*PLIST no se encuentra instalado*"`
        fi

	RUTA_BENEFICIOS="$grupo/data/beneficios.mae";
        if [ ! -r "$RUTA_BENEFICIOS" ]
        then 
             ERR_INST=`echo "$ERR_INST*No se encuentra el archivo maestro de beneficios*"`
        fi

	RUTA_AGENCIAS="$grupo/data/agencias.mae";
        if [ ! -r "$RUTA_AGENCIAS" ]
        then 
             ERR_INST=`echo "$ERR_INST*No se encuentra el archivo maestro de agencias*"`
        else
    			# Comprobamos si el archivo de secuencias ya fue creado
	        	ARCH_SEC=$grupo"/data/secuencias.dat"

	        	# Si el archivo no existe lo creamos
   	     	if [ ! -e $ARCH_SEC ]; then
                for agencia in `cut -d, -f2 $RUTA_AGENCIAS`;
                do
	                `echo $agencia":000000" >> $ARCH_SEC`
                done    
   			fi
        fi
}

function postonioPID(){
	TMP_POSTONIO=`ps -A | grep 'postonio'`
	ARR_POSTONIO=( `echo $TMP_POSTONIO` )
	PID_POSTONIO=`echo ${ARR_POSTONIO[0]}`
}

##########################
# Ejecución del comando	 #
##########################

#Chequeamos si el ambiente ya fue inicializado

INIT_CHK=`ambienteInicializado`

if [ $INIT_CHK -ne 0 ]
then #Ambiente inicializado previamente. Se da aviso.
	echo "*******************************************************************"
	echo "*				POSTINI: ADVERTENCIA			*"
	echo "*******************************************************************"
	echo "* Las variables de ambiente ya fueron inicializadas. 		*"
	echo "* PATH incluye $CDIR						*"
	echo "* CURRDIR = $CURRDIR						*"
	echo "* CONFDIR = $CONFDIR						*"
	echo "* BINDIR	= $BINDIR						*"
	echo "* ARRIDIR	= $ARRIDIR						*"
	echo "* LOGDIR	= $LOGDIR						*"
	echo "*******************************************************************"
else #Ambiente no inicializado previamente. Se procede a chequear Instula.conf.
	determinarGrupo
	verificarInstulaConf
	if [ ! -z "$ERR_INST" ] #Error de instalación.
	then
		echo "*******************************************************************"
		echo "*				POSTINI: ERROR FATAL			*"
		echo "*******************************************************************"
		echo "No se encuentra el archivo Instula.conf:"
		echo "Ejecución abortada."
	else #No hay error de Instula.conf. Se procede a inicializar el ambiente.
		inicializarAmbiente
		verificarInstalacion
		if [ ! -z "$ERR_INST" ] #Error de instalación.
		then
			echo "*******************************************************************"
			echo "*				POSTINI: ERROR FATAL			*"
			echo "*******************************************************************"
			echo "Se han producido los siguientes errores de instalación:"
			echo "$ERR_INST"
			echo "Ejecución abortada."
		else
			postonioPID #Se chequea si POSTONIO está corriendo
			if [ -z "$PID_POSTONIO" ] #El demonio no está corriendo. Iniciarlo.
			then
				nohup nice $RUTA_POSTONIO start &> /dev/null &
				sleep 1
				postonioPID
                if [ -z "$PID_POSTONIO" ]
                then
                    echo "*******************************************************************"
                    echo "*				POSTINI: ERROR FATAL			*"
                    echo "*******************************************************************"
                    echo "No se ha podido iniciar correctamente POSTONIO."
                    echo "Ejecución abortada."
                    exit 1
                fi
			fi
			#Notificación de éxito del programa
			echo "*******************************************************************"
			echo "*				POSTINI: OK				*"
			echo "*******************************************************************"
			echo "* AMBIENTE:"
			echo "* 	PATH incluye $CDIR"
			echo "* 	CURRDIR = $CURRDIR"
			echo "* 	CONFDIR = $CONFDIR"
			echo "* 	BINDIR	= $BINDIR"
			echo "* 	ARRIDIR	= $ARRIDIR"
			echo "* 	LOGDIR	= $LOGDIR"
			echo "* Demonio corriendo bajo el número: $PID_POSTONIO"	
		fi
	fi
fi

#TODO: 	Chequear mejor si el ambiente fue inicializado. Es decir, chequear que las
#	variables de ambiente seteadas previamente contengan en su ruta al directorio
#	$grupo, para evitar confusión al detectar un ambiente previo de otro grupo.
#TODO:	Chequear si efectivamente POSTONIO fue iniciado.
